package advanced.thread;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 线程状态
 * <p>
 * 1. 新生状态(每个线程被创建就有自己的工作空间,与主内存进行交互)
 * 2. 就绪状态(调用了start方法之后,等待被调度)
 * 就绪与运行之间还存在其他的状态
 *
 * <p>
 * ( 其他阻塞,  等待阻塞,  同步阻塞)
 * <p>
 * <p>
 * 3. 运行状态(被cpu 调度了,才进入运行状态)
 * 4. 死亡状态(线程任务执行完毕,或者被终端)
 * <p>
 * <p>
 * <p>
 * <p>
 * 线程的终止
 * 1. 线程任务执行完毕
 * 2. 认为干涉
 * <p>
 * 不要使用stop()  destory()方法,  他们不安全
 */
public class L6 implements Runnable {
    private boolean flag = true;
    private String name;

    public static void main(String[] args) throws InterruptedException {
        L6 tt = new L6();
        new Thread(tt, "tt").start();
        for (int i = 0; i < 100; i++) {
            if (i == 88) {
                tt.terminate();
                System.out.println("tt game over");
            }
            System.out.println("main-->" + i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    @Override
    public void run() {
        int i = 0;
        while (flag) {//通过改变此标志位来控制线程的终止
            System.out.println(Thread.currentThread().getName() + "-->" + i++);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 对外提供方法改变标识
     */
    public void terminate() {
        this.flag = false;
    }

    /**
     * 倒计时线程
     *
     * @param seconds 倒计时多少秒
     */

}
